package com.yuda.campsite.util;

/**
 * @Author: xiaohudie
 * @Date: 2021/12/7 9:21
 * @Version: 1.8
 */

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
/**讲这个类放入ioc中*/
@Component
@Slf4j
/**发送网易邮箱的工具类*/
public class SendNetEaseEmail {
    /**
     * 发件人邮箱地址
     */
    private String from = "ljl1357494913@126.com";
    /**
     * 发件人称号，同邮箱地址
     */
    private String user = "ljl1357494913@126.com";
    /**
     * 发件人邮箱客户端授权码
     */
    private String password = "TRVQNYGKFOCGJRWZ";

    public boolean sendMail(String to, String text, String title) {
        Properties props = new Properties();
        /**设置发送邮件的邮件服务器的属性（这里使用网易的smtp服务器）必须使用*/
        props.setProperty("mail.smtp.host", "smtp.126.com");
        /**需要经过授权，也就是有户名和密码的校验，这样才能通过验证（一定要有这一条）必须使用网易邮箱的固定格式*/
       /**  props.put("mail.smtp.host", "smtp.126.com");*/
        /**用刚刚设置好的props对象构建一个session*/
        props.put("mail.smtp.auth", "true");
        /**有了这句便可以在发送邮件的过程中在console处显示过程信息，供调试使
         用（你可以在控制台（console)上看到发送邮件的过程）*/
        Session session = Session.getDefaultInstance(props);
        /**关闭增加性能*/
        // session.setDebug(true); // 用session为参数定义消息对象
        /**加载发件人地址*/
        MimeMessage message = new MimeMessage(session);
        String nick = "";
        try {
            nick = javax.mail.internet.MimeUtility.encodeText("南开大学历史学院");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        try {
            message.setFrom(new InternetAddress(nick + "<" + from + ">"));
            /**加载收件人地址*/
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            /**加载标题(可以在这个地方定死，节约损耗)*/
            message.setSubject(title);
            // 向multipart对象中添加邮件的各个部分内容，包括文本内容和附件
            Multipart multipart = new MimeMultipart();
            // 设置邮件的文本内容
            BodyPart contentPart = new MimeBodyPart();
            contentPart.setContent(text, "text/html;charset=utf-8");
            multipart.addBodyPart(contentPart);
            message.setContent(multipart);
            // 保存变化
            message.saveChanges();
            // 连接服务器的邮箱
            Transport transport = session.getTransport("smtp");
            transport.connect("smtp.126.com", user, password);
            // 把邮件发送出去
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        } catch (MessagingException e) {
            e.printStackTrace();
            System.out.println("发送邮件失败");
            return false;
        }
        return true;
    }
}